<?php
    /*
	 * Requisicao automatica de classes que sao usadas no Sistema e não foram explicitamente incluidas.
	 */
	function pegaidcurso($urlCurso){
		$idCurso = array();
		$idCurso = BancoDados::query("SELECT idCurso FROM cursos WHERE urlCurso = '$urlCurso';");
		$idCurso = $idCurso[0][0];
		return $idCurso;
	}
	function pegaUsuariosCurso($idCurso){
			$k = 0;
			$usuarios = BancoDados::query("SELECT idUsuario FROM cursosAlunos WHERE idCurso = '$idCurso';");
			foreach($usuarios as $idUsuario){
				$nomesUsuarios = BancoDados::query("SELECT nome FROM usuarios WHERE idUsuario = '$idUsuario[0]';");
				foreach($nomesUsuarios as $nome){
					$usuariosNomes[$k]['nome'] = $nome[0];
					$usuariosNomes[$k]['id'] = $idUsuario[0];
					$k++;
				}
			}
			return $usuariosNomes;
		}
	function __autoload($classe){
		$nomeArquivo	=	$classe . '.class.php';
		$arquivo		=	constant('CAMINHO_SITE') . '/modelo/' . $nomeArquivo;
		
		if (!file_exists($arquivo)){
			return false;
		}
		require($arquivo);
	}
	
	/**
	 * Redireciona para a pagina $pagina
	 * @param array $parametros
	 * @param string[optional] $tipo Pode assumir os valores interno[default] ou externo.
	 */
	function redireciona($parametros, $tipo='interno'){
		$pagina	=	montaLink($parametros, $tipo);
		header('Location: ' . $pagina);
		exit;
	}  
	
	/**
	 * Escreve os links do site no padrao estabelecido.
	 * @return string
	 * @param array $parametros
	 */
	function montaLink($parametros, $tipo = 'interno'){
		$link 	=	'';
		if ($tipo == 'interno'){
			$link	=	constant('CAMINHO_LINK');
		}
		foreach($parametros as $chave => $parametro){
			if ($parametro != '') {
				$link 	.=	$chave == sizeof($parametros) - 1 ? $parametro : $parametro . '/';
			}
		}
		return $link;
	}
	
	function linkDownload($tipo, $nomeUp, $nome = null){
		return montaLink(array('download', $tipo, $nomeUp, $nome));
	}
	
	function getUrlCompleta() {
		return 'http://' . $_SERVER['HTTP_HOST'] . constant('CAMINHO_LINK');
	}
	
	function adicionaMensagem($strMensagem, $tipo = 'mensagem') {
		if ($tipo == 'mensagem') {
			if (!isset($_SESSION['constructore']['mensagens']) || !is_array($_SESSION['constructore']['mensagens'])) {
				$_SESSION['constructore']['mensagens']	=	array();
			}
			array_push($_SESSION['constructore']['mensagens'], $strMensagem);
		}
		else {
			if (!isset($_SESSION['constructore']['mensagensErro']) || !is_array($_SESSION['constructore']['mensagensErro'])) {
				$_SESSION['constructore']['mensagensErro']	=	array();
			}
			array_push($_SESSION['constructore']['mensagensErro'], $strMensagem);
		}
	}
	
	function pegaPost($indice) {
		$post	=	isset($_POST[$indice]) ? (get_magic_quotes_gpc() ? $_POST[$indice] : addslashes($_POST[$indice])) : null;
		return	$post;
	}
	
	function canonizar($string) {
		$string	=	strtolower($string);
		$string	=	trim($string);
		$regexps	=	array(	0	=>	'/ /',
								1	=>	'/(á|à|ã|â|ä|Á|À|Ã|Â|Ä)/',
								2	=>	'/(é|è|ẽ|ê|ë|É|È|Ẽ|Ê|Ë)/',
								3	=>	'/(í|ì|ĩ|î|ï|Í|Ì|Ĩ|Î|Ï)/',
								4	=>	'/(ó|ò|õ|ô|ö|Ó|Ò|Õ|Ô|Ö)/',
								5	=>	'/(ú|ù|ũ|û|ü|Ú|Ù|Ũ|Û|Ü)/',
								6	=>	'/(ç|Ç)/');
		
		$replaces 	=	array(	0	=>	'-',
								1	=>	'a',
								2	=>	'e',
								3	=>	'i',
								4	=>	'o',
								5	=>	'u',
								6	=>	'c');
		$string	=	preg_replace($regexps, $replaces, $string);
		return $string;
	}
	
	function codificaStringBusca($string) {
		$regexps	=	array(	0	=>	'/\//',
								1	=>	'/a/',
								2	=>	'/e/',
								3	=>	'/i/',
								4	=>	'/o/',
								5	=>	'/u/',
								6	=>	'/c/');
		
		$replaces	=	array(	0	=>	'',
								1	=>	'(a|á|à|ã|â|ä)',
								2	=>	'(e|é|è|ẽ|ê|ë)',
								3	=>	'(i|í|ì|ĩ|î|ï)',
								4	=>	'(o|ó|ò|õ|ô|ö)',
								5	=>	'(u|ú|ù|ũ|û|ü)',
								6	=>	'(c|ç)');
		
		$string	=	preg_replace($regexps, $replaces, $string);
		return	$string;
	}
	
	function configuraRegexpStringBusca($string, $tabela) {
		$strQuery	=	"";
		
		$arrayString	=	$string != null ? explode('"', stripslashes($string)) : array();
		foreach ($arrayString as $chave => $string1) {
			if ($chave % 2 == 0) {
				if ($string1 != '') {
					$arrayStringFora	=	explode(' ', $string1);
					foreach ($arrayStringFora as $string2) {
						$strQuery	.=	$tabela . ' REGEXP ".*' . $string2 . '.*" AND ';
					}
				}	
			}
			else {
				if ($string1 != '') {
					$strQuery	.=	$tabela . ' REGEXP ".*' . $string1 . '.*" AND ';
				}
			}
		}
		
		return $strQuery;
	}
	
	/**
	 * 
	 */
	function redimensionaImagem($caminhoOrigem, $caminhoDestino, $largura, $altura, $qualidade = 100) {
		//ABRIR A IMAGEM
		$extensaoOrigem	=	strtolower(strrchr($caminhoOrigem, '.'));
		
		$imagem			=	null;
		
		switch($extensaoOrigem) {
			case '.jpg':
			case '.jpeg':
				$imagem	=	imagecreatefromjpeg($caminhoOrigem);
				break;
				
			case '.gif':
				$imagem	=	imagecreatefromgif($caminhoOrigem);
				break;
				
			case '.png':
				$imagem	=	imagecreatefrompng($caminhoOrigem);
				break;
				
			default:
				$imagem	=	false;
				break;
		}
		
		if ($imagem) {
			$larguraOriginal	=	imagesx($imagem);
			$alturaOriginal		=	imagesy($imagem);
			
			
			//CONTAS PARA LARGURA E ALTURA OTIMAS
			if ($larguraOriginal > $largura || $alturaOriginal > $altura) {
				if ($larguraOriginal / $alturaOriginal >= 3/4) {
					$larguraNova	=	$largura;
					
					$alturaNova		=	round($alturaOriginal * $larguraNova / $larguraOriginal);
				}
				else {
					$alturaNova		=	$altura;
					
					$larguraNova	=	round($larguraOriginal * $alturaNova / $alturaOriginal);
				}
			}
			else {
				$larguraNova	=	$larguraOriginal;
				$alturaNova		=	$alturaOriginal;
			}
				
			
			//CRIA NOVA IMAGEM
			$imagemNova		=	imagecreatetruecolor($larguraNova, $alturaNova);
			imagealphablending($imagemNova, false);
			imagesavealpha($imagemNova, true);
			
			//COPIA IMAGEM ANTIGA NA NOVA
			imagecopyresampled($imagemNova, $imagem, 0, 0, 0, 0, $larguraNova, $alturaNova, $larguraOriginal, $alturaOriginal);
			
			//SALVA NOVA IMAGEM
			$extensaoDestino	=	strtolower(strrchr($caminhoDestino, '.'));
			
			switch ($extensaoDestino) {
				case '.jpg':
				case '.jpeg':
					if (imagetypes() & IMG_JPG) {
						imagejpeg($imagemNova, $caminhoDestino, $qualidade);
					}
					break;
					
				case '.gif':
					if (imagetypes() & IMG_GIF) {
						imagegif($imagemNova, $caminhoDestino);
					}
					break;
				
				case '.png':
					//A ESCALA DE QUALIDADE DO PNG É DIFERENTE, DE 0 A 9
					$escalaQualidade	=	round(($qualidade / 100) * 9);
					
					//ESCALA INVERTIDA, ESCALA DO PNG: 0 E MELHOR, 9 É PIOR
					$escalaQualidadeInvertida	=	9 - $escalaQualidade;
					
					if (imagetypes() & IMG_PNG) {
						imagepng($imagemNova, $caminhoDestino, $escalaQualidadeInvertida);
					}
					break;
					
				default:
					//SEM EXTENSAO NAO SALVA
					break;
			}
			
			imagedestroy($imagem);
			imagedestroy($imagemNova);
		}
		else {
			return false;
		}
	}
	
	//TODO Redefinir o tamanho dos assuntos no BD para mais de 50?
	/**
	 * Retorna um array com todos os assuntos da Área Fale Conosco
	 * @return 
	 */
	function getAssuntosFaleConosco() {
		return array (	texto('ASSUNTOS_FALE_CONOSCO_LOGIN'),
						texto('ASSUNTOS_FALE_CONOSCO_CADASTRO'),
						texto('ASSUNTOS_FALE_CONOSCO_DUVIDA'),
						texto('ASSUNTOS_FALE_CONOSCO_CRITICA'),
						texto('ASSUNTOS_FALE_CONOSCO_ELOGIO'),
						texto('ASSUNTOS_FALE_CONOSCO_OUTROS'));
	}
	
	/**
	 * Retorna um array com todos os Estados Brasileiros.
	 * @return array
	 */
	function getEstados() {
        return array (	"AC",
                        "AL",
                        "AP",
                        "AM",
                        "BA",
                        "CE",
                        "DF",
                        "ES",
                        "GO",
                        "MA",
                        "MT",
                        "MS",
                        "MG",
                        "PA",
                        "PB",
                        "PR",
                        "PE",
                        "PI",
                        "RJ",
                        "RN",
                        "RS",
                        "RO",
                        "RR",
                        "SC",
                        "SP",
                        "SE",
                        "TO");
	}
	
	/**
	 * Retorna um array com todos os Niveis possiveis de curso.
	 * @return array
	 */
	function getNiveis() {
		return array(	texto('NIVEL_FUNDAMENTAL'),
						texto('NIVEL_MEDIO'),
						texto('NIVEL_GRADUACAO'),
						texto('NIVEL_POS_GRADUACAO'),
						texto('NIVEL_OUTRO'));
	}
	
	/**
	 * Retorna um array com todas as Titulacoes possiveis de professor.
	 * @return array
	 */
	function getTitulacoes() {
		return array(	texto('TITULACAO_GRADUACAO'),
						texto('TITULACAO_ESPECIALIZACAO'),
						texto('TITULACAO_MESTRADO'),
						texto('TITULACAO_DOUTORADO'));
	}
	
	/**
	 * Retorna um array com todas os periodos possiveis.
	 * @return array
	 */
	function getPeriodo() {
		$periodos	=	array();
		
		for ($i = 1; $i <= constant('__MAXIMO_PERIODOS__'); $i++) {
			array_push($periodos, $i);
		}
		
		return $periodos;
	}
	
	function getBrowser()
	{
		$var = $_SERVER['HTTP_USER_AGENT'];
		$info['browser'] = "OTHER";
        
		// valid brosers array
		$browser = array ("MSIE", "OPERA", "FIREFOX", "MOZILLA",
		                  "NETSCAPE", "SAFARI", "LYNX", "KONQUEROR");
		
		// bots = ignore
		$bots = array('GOOGLEBOT', 'MSNBOT', 'SLURP');
		
		foreach ($bots as $bot)
		{
		    // if bot, returns OTHER
		    if (strpos(strtoupper($var), $bot) !== FALSE)
		    {
		        return $info;
		    }
		}
        
		// loop the valid browserss
		foreach ($browser as $parent)
		{
		    $s = strpos(strtoupper($var), $parent);
		    $f = $s + strlen($parent);
		    $version = substr($var, $f, 5);
		    $version = preg_replace('/[^0-9,.]/','',$version);
		    if (strpos(strtoupper($var), $parent) !== FALSE)
		    {
		        $info['browser'] = $parent;
		        $info['version'] = $version;
		        return $info;
		    }
		}
		return $info;
    }
	
	function texto($constante, $variaveis=null) {
		$xmlIdioma 	=	$_SESSION['constructore']['xmlIdioma'];
		//$xmlIdioma	=	new DOMDocument();
		//$xmlIdioma->Load(constant('CAMINHO_SITE') . 'configuracao/idioma/' . constant('IDIOMA_ATUAL') . '.xml');
		$raiz		=	$xmlIdioma->getElementsByTagName('vocabulario');
		$raiz		=	$raiz->item(0);
		
		$xpath	=	new DOMXPath($xmlIdioma);
		$query	=	'/vocabulario/define[@id="' . $constante . '"]';
		$elemento	=	$xpath->query($query);
		
		if ($elemento->length > 0) {
			$string 		=	$elemento->item(0)->nodeValue;
			$stringVetor	=	explode('||', $string);
			
			$stringFinal	=	"";
			
			if (sizeof($stringVetor) == 1) {
				return ($string);
			}
			else {
				if(is_array($variaveis) && (sizeof($stringVetor) > 1) &&(sizeof($stringVetor) == sizeof($variaveis) + 1)) {
					foreach ($stringVetor as $i => $pedacoString) {
						$stringFinal	.=	isset($variaveis[$i]) ? $pedacoString . $variaveis[$i] : $pedacoString;
					}
					return ($stringFinal);
				}
				else {
					return ("Faltam argumentos: " . $constante);
				}
			}
		}
		else
			return("Definir: " . $constante);
	}
	
	function textoEmail ($constante, $variaveis = null) {
		if (defined($constante)) {
			$string 		=	constant($constante);
			$stringVetor	=	explode('||', $string);
			
			$stringFinal	=	"";
			
			if (sizeof($stringVetor) == 1) {
				return ($string);
			}
			else {
				if(is_array($variaveis) && (sizeof($stringVetor) > 1) &&(sizeof($stringVetor) == sizeof($variaveis) + 1)) {
					foreach ($stringVetor as $i => $pedacoString) {
						$stringFinal	.=	isset($variaveis[$i]) ? $pedacoString . $variaveis[$i] : $pedacoString;
					}
					
					return ($stringFinal);
				}
				else {
					return ("Faltam argumentos: " . $constante);
				}
			}
		}
		else {
			return ("Definir: " . $constante);
		}
	}
	
	function email ($strDestinatario, $strAssunto, $strTitulo, $strEmail, $copiaAdm = false) {
		
		// $mail	=	new PHPMailer();
		// $mail->IsSMTP();
		
		
		
		// $mail->Host			=	constant('EMAIL_CONFIG_HOST');
		// $mail->SMTPAuth		=	constant('EMAIL_CONFIG_AUTH');
		// $mail->SMTPSecure	=	constant('EMAIL_CONFIG_METH');
		// $mail->Username		=	constant('EMAIL_CONFIG_USER');
		// $mail->Password		=	constant('EMAIL_CONFIG_PASS');
		// $mail->Port			=	constant('EMAIL_CONFIG_PORT');
		// $mail->CharSet		=	'utf-8';
		
		// $mail->SetFrom(constant('EMAIL_ADM_FROM'), constant('EMAIL_ADM_NOME'));
		// $mail->Subject	=	textoEmail('EMAIL_ASSUNTO', array($strAssunto));
		// $mail->AltBody	=	'Seu cliente de e-mail não permite HTML.';
		// $mail->MsgHTML(textoEmail('EMAIL_CORPO_GERAL', array($strTitulo, $strEmail)));
		
		// if (sizeof(explode(',', $strDestinatario)) == 1) {
			// $mail->AddAddress($strDestinatario);
		// }
		// else {
			// $listaDestinatarios	=	explode(',', $strDestinatario);
			// foreach($listaDestinatarios as $destinatario) {
				// $mail->AddBCC($destinatario);
			// }
		// }
		// if ($copiaAdm){
			// $mail->AddBcc(constant('EMAIL_ADM_FROM'), constant('EMAIL_ADM_NOME'));
		// }
		// $enviado	=	$mail->Send();
		
		// if (!$enviado){
			// echo $mail->ErrorInfo;
		// }
		// $mail->ClearAllRecipients();
		// $mail->ClearAttachments();
		
		// return $enviado;
		$conteudo = textoEmail('EMAIL_CORPO_GERAL', array($strTitulo, $strEmail));
		// $headers = "Content-type: text/html; charset=iso-8859-1\r\n";
		// $headers .= "From: Euzim <aestebanez@mail.com>\r\n";
		if(!isset($strEmail)){
			return mail($strDestinatario, $strAssunto, $conteudo, 'From: admin@constructore.com');
		}
		else{
			return mail($strDestinatario, $strAssunto, $conteudo, $strEmail);
		}
	}
	
	function nomeSobrenome ($nomeCompleto) {
		$nomeCompletoVetor	=	explode(' ', $nomeCompleto);
		$ultimoNome			=	end($nomeCompletoVetor);	
		$primeiroNome		=	$nomeCompletoVetor[0];
		$nomeExibicao		=	'';
		
		if ($primeiroNome != $ultimoNome) {
			$nomeExibicao 	=	$primeiroNome . ' ' . $ultimoNome;
		}
		else {
			$nomeExibicao 	=	$primeiroNome;
		}
		
		if (strlen($nomeExibicao) > 150) {
			$nomeExibicao 	=	substr($nomeExibicao, 0, 146) . "...";
		}
		return $nomeExibicao;
	}
	
	function configuraHTMLFormatado ($html) {
		$html	=	preg_replace('/(\.\.\/)+imagens/', getUrlCompleta(). 'imagens/', $html);
		$html	=	reconheceLinks($html);
		return $html;
	}
	
	function reconheceLinks($html) {
		$html	=	str_replace("\\'", "'", $html);
		$html	=	str_replace('\\"', '"', $html);
		preg_match_all("/((((href|src)=[\"\'])|<a.*>)(http:\/\/)?(www\.)?[a-zA-Z0-9\-_]+([\.\/][a-z0-9\-_]+)+([a-zA-Z0-9\/#?=\.\-_]|&amp\;)+([\"\']|<\/a>)+)/", $html, $ocorrencias);
		$html	=	preg_replace("/((((href|src)=[\"\'])|<a.*>)(http:\/\/)?(www\.)?[a-zA-Z0-9\-_]+([\.\/][a-z0-9\-_]+)+([a-zA-Z0-9\/#?=\.\-_]|&amp\;)+([\"\']|<\/a>)+)/" , "##CODIGO##", $html);
		$html	=	preg_replace("/((http:\/\/)?((www\.)?[a-zA-Z0-9\-_]+(\.[a-z0-9\-_]+)+([a-zA-Z0-9\/#?=\.\-_]|&amp\;)+))/" , "<a href=\"http:\/\/$3\" rel=\"nofollow\" class=\"linkPossivelAbrirNovaJanela\">$1</a>", $html);
		foreach($ocorrencias[0] as $ocorrencia) {
			$ocorrencia	=	preg_replace('/href=[(\"\')](http:\/\/)?(.*)[(\"\')]/', 'href="http://$2" class="linkPossivelAbrirNovaJanela" rel="nofollow"', $ocorrencia);
			$html	=	preg_replace("/##CODIGO##/" , $ocorrencia , $html, 1);
		}
		$html	=	str_replace("'", "\\'", $html);
		$html	=	str_replace('"', '\\"', $html);
		return $html;
	}
	
	function configuraHTMLExibicao($html) {
		return configuraEmbedYouTube($html);
	}
	
	function configuraEmbedYouTube($html) {
		preg_match_all('(<a.*href=\"(http://)?(www\.)?(youtube\.com/watch.*)\">.*</a>)', $html, $ocorrencias);
		if (sizeof($ocorrencias[0]) > 0) {
			foreach($ocorrencias[0] as $chave=>$ocorrecia) {
				$ocorrencias[3][$chave]	=	str_replace("watch?v=", "v/",$ocorrencias[3][$chave]);
				$html	=	str_replace($ocorrecia, '	<object width="480" height="385">
															<param name="movie" value="http://www.' . $ocorrencias[3][$chave] .'&rel=0"></param>
															<param name="allowFullScreen" value="true"></param>
															<param name="allowscriptaccess" value="always"></param>
															<embed src="http://www.' . $ocorrencias[3][$chave] .'&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed>
														</object>', $html);
			}
		}
		return $html;
	}
	
	function validaNumero($numero, $tamanho=false, $comparacao='='){
		if ($tamanho){
			if ($comparacao	==	'<='){
				if(!(strlen($numero) <= $tamanho)){
					return false;
				}
			}
			else{
				if($comparacao	==	'>='){
					if(!(strlen($numero) >= $tamanho)){
						return false;
					}
				}
				else{
					if(!(strlen($numero) == $tamanho)){
						return false;
					}
				}
			}
		}
		if(is_numeric($numero) && $numero >= 0){
			return true;
		}
		else{
			return false;
		}
	}
	
	/**
	 * Verifica se uma data e valida
	 * @return bool
	 * @param int $dia
	 * @param int $mes
	 * @param int $ano
	 */
	function validaData($dia, $mes, $ano){
		if (validaAno($ano) && validaMes($mes) && validaDia($dia)){
			if ($mes == 2){
				if ($ano%100 == 0){
					$ano = $ano/100;
				}
				if ($ano%4 == 0){
					if ($dia <= 29){
						return true;
					}
					else{
						return false;
					}
				}
				else{
					if ($dia <= 28){
						return true;
					}
					else{
						return false;
					}
				}
				
			}
			elseif($mes == 1 || $mes == 3 || $mes == 5 || $mes == 7 || $mes == 8 || $mes == 10 || $mes == 12 ){
					return true;
			}
			else{
				if ($dia <= 30){
					return true;
				}
				else{
					return false;
				}
			}
		}
		else{
			return false;
		}
	}
	
	/**
	 * Valida uma data em formato String.
	 * @return bool
	 * @param string $data
	 */
	function validaDataString($data) {
		$data	=	explode('-', $data);
		if (sizeof($data) != 3) {
			return false;
		}
		return validaData($data[2], $data[1], $data[0]);
	}
	
	/**
	 * Verifica se o ano é um número entre 1900 e 2100.
	 * @return bool
	 * @param int $ano
	 */
	function validaAno($ano) {
		if(validaNumero($ano, 4)){
			if ($ano >= 1900 && $ano <= 2100){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	/**
	 * Verifica se o mes é um número entre 1 e 12
	 * @return bool
	 * @param int $mes
	 */
	function validaMes($mes) {
		if (validaNumero($mes, 2, '<=')){
			if ($mes >= 1 && $mes <= 12){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	/**
	 * Verifica se o dia e um numero entre 1 e 31.
	 * @return bool
	 * @param int $dia
	 */
	function validaDia($dia) {
		if (validaNumero($dia, 2, '<=')){
			if ($dia >=1 && $dia <=31){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return false;
		}
		
	}
	
	function comparaStringCanonizar ($string1, $string2) {
		return strcmp(canonizar($string1), canonizar($string2));
	}
	
	/**
     * Compara duas datas, retorna 1 se a segunda for maior, -1 se for menor e 0 se forem iguais.
     * @return int
     * @param int $dia1
     * @param int $mes1
     * @param int $ano1
     * @param int $dia2
     * @param int $mes2
     * @param int $ano2
     */
  function comparaDatas($dia1, $mes1, $ano1, $dia2, $mes2, $ano2) {
      if ($ano2 > $ano1) {
          return 1;
      }
      if ($ano2 < $ano1) {
          return -1;
      }
      else {
          if ($mes2 > $mes1) {
              return 1;
          }
          if ($mes2 < $mes1) {
              return -1;
          }
          else {
              if ($dia2 > $dia1) {
                  return 1;
              }
              if ($dia2 < $dia1) {
                  return -1;
              }
              else {
                  return 0;
              }
          }
      }
    }
	
	/**
     * Compara duas datas, retorna 1 se a segunda for maior, -1 se for menor e 0 se forem iguais.
     * @return int
     * @param string $data1
     * @param string $data2
     */
	
	function comparaDatasString($data1, $data2){
		$data1 		=	explode('-', $data1);
		$data2 		=	explode('-', $data2);
		return comparaDatas($data1[2], $data1[1], $data1[0], $data2[2], $data2[1], $data2[0]);
	}
	
	
	function validaUrl($string, $limite=false) {
		 /*
         * Expressao regular de valores alfabeticos.
         */
        $listaValores    =    "/^[a-z0-9]+[a-z0-9\-]$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;
            }
        }
	}
	
	function validaUrlExterna($url) {
		//Retirado de http://phpcentral.com/208-url-validation-in-php.html
		//$urlRegex = "^(https?|ftp)\:\/\/";
		$urlRegex = "/^(https?)\:\/\/"; //Nao permitir ftp

		// USER AND PASS (optional)
		//$urlRegex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";

		// HOSTNAME OR IP
		$urlRegex .= "[a-zA-Z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*"; // http://x = allowed (ex. http://localhost, http://routerlogin)
		//$urlRegex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)+"; // http://x.x = minimum
		//$urlRegex .= "([a-z0-9+\$_-]+\.)*[a-z0-9+\$_-]{2,3}"; // http://x.xx(x) = minimum
		//use only one of the above

		// PORT (optional)
		$urlRegex .= "(\:[0-9]{2,5})?";
		// PATH (optional)
		$urlRegex .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?";
		// GET Query (optional)
		$urlRegex .= "(\?[a-zA-Z+&\$_.-][a-z0-9;:@\/\&%=+\$_.-]*)?";
		// ANCHOR (optional)
		$urlRegex .= "(#[a-zA-Z_.-][a-z0-9+\$_.-]*)?\$/";

		return (preg_match($urlRegex, $url));
	}
	
	/**
     * Verifica se uma determinada string possui SOMENTE valores alfabeticos (de a a z e de A a Z) ou espacos e se seu tamanho e menor ou igual ao limite passado. Se nenhum limite for passado, nao verifica o tamanho da string.
     * @return bool
     * @param string $string String que sera avaliada.
     * @param int $limite[optional] Tamanho limite da string.
     */
    function validaAlfabetico($string, $limite=false) {
       
        /*
         * Expressao regular de valores alfabeticos.
         */
        $listaValores    =    "/^[a-zA-ZáàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]+[a-zA-Z áàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ]*$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;
            }
        }
    }
   
    /**
     * Verifica se uma determinada string possui valores alfanumericos (de a a z e de A a Z e numeros) ou espacos, virgulas, pontos, dois pontos, tracos, parenteses, interrogacoes, exclamacoes ou underscores e se seu tamanho e menor ou igual ao limite passado. Se nenhum limite for passado, nao verifica o tamanho da string.
     * @return bool
     * @param string $string String que sera avaliada.
     * @param int $limite[optional] Tamanho limite da string.
     */
    function validaAlfaNumerico($string, $limite=false) {
       
        /*
         * Expressao regular de valores alfa-numericos.
         */
        $listaValores    =    "/^[a-zA-Z áàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ\d\´\'\,\.\:\-\(\)\?\!_\/\r\n]+$/";
       
        if (!$limite) {
            if (preg_match($listaValores, $string)) {
                return    true;
            }
            else {
                return    false;
            }
        }
        else {
            if (strlen($string) <= $limite) {
                if (preg_match($listaValores, $string)) {
                    return    true;
                }
                else {
                    return    false;
                }
            }
            else {
                return    false;;
            }
        }
	}
	
	
	/**
	 * Verifica se o e-mail é da forma email@email[.com]*
	 * @return bool
	 * @param string $email
	 */
	function validaEmail($email) {
		$listaValores	=	'/^[a-zA-Z0-9_\-\.]{3,}@[a-zA-Z1-9_\-]+(\.[a-zA-Z1-9_\-]+)+$/';
		if (strlen($email)	<=	constant('__TAM_EMAIL_USUARIO__')){
			return preg_match($listaValores, $email);
		}
		else{
			return false;
		}
		
	}
	
	/**
	 * Verififica se o nome do arquivo da foto e valido e se a extensao dos arquivos de foto e jpg, jpeg, gif, png ou bmp.
	 * @return bool
	 * @param string $nomeArquivo
	 */
	function validaFoto($nomeArquivo){
		$listaValores    =    "/^[a-zA-ZáàãâéèêíìîóòôõúùûüçÁÀÃÂÉÈÊÍÌÎÓÒÔÕÚÙÛÇ\d\.\-_ ]+\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG)$/";
		
		return preg_match($listaValores, $nomeArquivo);
	}
	
	/**
	 * Verifica se a Senha não contem nenhum aspas(") ou plique(') e se tem pelo menos 4 caracteres.
	 * @return bool
	 * @param string $senha
	 */
	function validaSenha($senha){
		$listaValores	=	"/^[^\"']{4,}$/";

		if(strlen($senha) <= constant('__TAM_SENHA_USUARIO__') && strlen($senha) >= constant('__TAM_MINIMO_SENHA_USUARIO__') ){
			return preg_match($listaValores, $senha);
		}
		else{
			return false;
		}
	}
	
	/*
	 * Função usada para escrever a mensagem de saudação ao usuário ao logar-se
	 * @return array
	 * @param object $usuario
	 */
	function escreveSaudacao($usuario){
		
		$hora	=	date('H');
		
		if ($hora	>=	4	&&	$hora	<	12){
			$saudacao	=	texto('MENSAGEM_BOM_DIA');
		}
		else{
			if ($hora	>=	12	&&	$hora	<	18){
				$saudacao	=	texto('MENSAGEM_BOA_TARDE');
			}
			else{
				if (($hora	>=	18	&&	$hora	<=	23) || ($hora	>=	0	&&	$hora	<	4)){
					$saudacao	=	texto('MENSAGEM_BOA_NOITE');
				}
			}
		}
		
		$nomeUsuario =	nomeSobrenome($usuario->getNome());
		$data 		 =  date('d/m/Y', strtotime($usuario->getUltimoAcesso()));
		$hora        = date('H:i:s', strtotime($usuario->getUltimoAcesso()));
		
		return array($saudacao, $nomeUsuario, $data, $hora);
		
	}
	
	/**
	 * Retorna o mês por extenso
	 * @param $intMes
	 * @return string
	 */
	function getStringMes($intMes){
		
		if($intMes == '01'){
			$strMes = texto('JANEIRO');
		}else if($intMes == '02'){
			$strMes = texto('FEVEREIRO');
		}else if($intMes == '03'){
			$strMes = texto('MARCO');
		}else if($intMes == '04'){
			$strMes = texto('ABRIL');
		}else if($intMes == '05'){
			$strMes = texto('MAIO');
		}else if($intMes == '06'){
			$strMes = texto('JUNHO');
		}else if($intMes == '07'){
			$strMes = texto('JULHO');
		}else if($intMes == '08'){
			$strMes = texto('AGOSTO');
		}else if($intMes == '09'){
			$strMes = texto('SETEMBRO');
		}else if($intMes == '10'){
			$strMes = texto('OUTUBRO');
		}else if($intMes == '11'){
			$strMes = texto('NOVEMBRO');
		}else if($intMes == '12'){
			$strMes = texto('DEZEMBRO');
		}
						
		return $strMes;
	}
	
	/**
	 * Recebe a data no formato do banco de dados e retorna ela formatada.
	 * @param $dataHora
	 * @return $data
	 */
	function getDataFormatada($data){
		return $dataFormatada = date('d/m/Y', strtotime($data));
	}
	
	/**
	 * Recebe a hora no formato do banco de dados e retorna ela formatada.
	 * @param $dataHora
	 * @return $hora
	 */
	function getHoraFormatada($hora){
		return $horaFormatada = date('H:i:s', strtotime($hora));
	}
	
	/**
	 * Recebe um datetime e retorna no formato dd/mm/aaaa às h:m:s
	 * @return 
	 */
	function getDataHoraFormatada($dataHora) {
        return date('d/m/Y', strtotime($dataHora))." às ".date('H:i:s', strtotime($dataHora));
    }
	
	function getDataHoraFormatada2($dataHora) {
        return date('d/m/Y', strtotime($dataHora))." ".date('H:i:s', strtotime($dataHora));
    }
	
	function getDataFormatoBd($data) {
		$vetorData	=	explode('/', $data);
		if (sizeof($vetorData) == 3 ) {
			return $vetorData[2] . '-' . $vetorData[1] . '-' . $vetorData[0];
		}
		return null;
	}
	
	/**
	 * 
	 * @param String $funcaoUsuario
	 * @return String
	 */
	function getFuncaoUsuarioExibir($funcaoUsuario) {
		switch($funcaoUsuario) {
			case 'Aluno':
				$funcaoUsuario	=	texto('DADOS_FINALIDADE_DE_USO_ALUNO');
				break;
			case 'Professor':
				$funcaoUsuario	=	texto('DADOS_FINALIDADE_DE_USO_PROFESSOR');
				break;
			case 'Administrador':
				$funcaoUsuario	=	texto('DADOS_FINALIDADE_DE_USO_ADMINISTRADOR');
				break;
			case 'Tutor':
				$funcaoUsuario	=	texto('DADOS_FINALIDADE_DE_USO_TUTOR');
				break;
			case 'Monitor':
				$funcaoUsuario	=	texto('DADOS_FINALIDADE_DE_USO_MONITOR');
				break;
		}
		
		return $funcaoUsuario;
	}
	
	/**
	 * 
	 * @param String $texto
	 * @return String
	 */
	function limitaTexto($texto, $limite = 20) {
		if (strlen($texto) > $limite)
			return substr($texto, 0, $limite) . '...';
		else
			return $texto;
	}
	
	/**
	 * 
	 * @param Float $tamanho
	 * @return String
	 */
	function formataTamanho($tamanho, $precisao = 2) {
		$tamanhoFormatado	=	round($tamanho/1024, $precisao);
		if ($tamanhoFormatado < 0.5) {
			$tamanhoFormatado	=	round($tamanho, $precisao);
			if ($tamanhoFormatado < 0.5) {
				$tamanhoFormatado	= round($tamanho * 1024, $precisao) . " bytes";
			}
			else{
				$tamanhoFormatado	.= " KB";
			}
		}
		else {
			$tamanhoFormatado	.= " MB";
		}
		return $tamanhoFormatado;
	}
	
	function tiraPorcento($url){
		$array = explode("%20", $url);
		$frase = implode(" ", $array);
		return $frase;
	}
	
	//para quando o $idCurso pode ser passado normalmente
	function atualizaCurso($idCurso = null){
		$urlCurso = constant('PARAMETRO_1');
		$strQuery = "UPDATE cursos SET dataUltimaAtualizacao = NOW() WHERE urlCurso = '$urlCurso'";
		if ($resultado = BancoDados::query($strQuery)){
			return true;
		}
		else
			return false;
	}
	
	
	function getAtualizacoes(){
		$strQuery = "SELECT dataUltimaAtualizacao, c.nome as cursoNome, urlCurso, u.nome as professor FROM cursos c inner join usuarios u on (idDono=idUsuario) ORDER BY(dataUltimaAtualizacao) DESC";
		//echo $strQuery;
		if ($resultado = BancoDados::query($strQuery)){
			foreach($resultado as $indice => $coluna){
				//echo "<br>Professor: ".$coluna['professor'];
				$dataUltimaAtualizacao[$indice] = $coluna['dataUltimaAtualizacao'];
				//echo "<br>Depois: ".$dataUltimaAtualizacao[$indice];
			}
			return $resultado;
		}else
			return false;
	}


    function obj2arr($ob ,$matriz = FALSE)
    {	
		if ($matriz === TRUE){
			$arrayObjetos = array();
			foreach($ob as $indice => $conteudo){
				array_push($arrayObjetos,get_object_vars($conteudo));
			}
			return $arrayObjetos;
		} else
        {
            return get_object_vars($ob); //retorna array associativa
        }
    }
		
	function getParticipacaoCurso($usuario, $curso){
		$arrayCursos	=	$usuario->getCursos();
		if (($usuario->getTipoCadastro() == 'Administrador') || isset($arrayCursos[$curso->getIdCurso()])) {
		//	$this->getSmarty()->assign('possivelMudarVisualizacao', true);
			
			if (isset($_SESSION['constructore']['curso']) && isset($_SESSION['constructore']['curso'][$curso->getUrlCurso()]) && isset($_SESSION['constructore']['curso'][$curso->getUrlCurso()]['tipoVisualizacao'])) {
				$visualizacaoAtual	=	$_SESSION['constructore']['curso'][$curso->getUrlCurso()]['tipoVisualizacao'];
			}
			else {
				$visualizacaoAtual	=	$usuario->getTipoCadastro() == 'Administrador' ? 'Administrador' : $arrayCursos[$curso->getIdCurso()]['participacao'];
			}
		}
		else {
			$visualizacaoAtual	= 'Visitante';
		}
		return $visualizacaoAtual;
	}
	
	function set(){
		//global $controle;
		call_user_func_array(array($GLOBALS['controle']->getSmarty(), 'assign'), func_get_args());
		
		//($controle->getSmarty()->set(), func_get_args());
	}
	
	function display(){
		call_user_func_array(array($GLOBALS['controle'], 'exibir'), func_get_args());
	}
	
	function debug($item, $titulo=null){
		echo "<br>================================================================================================<br/>";
		if($titulo) echo "$titulo: ";
		echo "<pre>";
			print_r($item);
		echo "</pre>";
		echo "================================================================================================<br/>";
		
	}
	
	function debug2($string, $titulo=null){
		echo "<br />";
		if($titulo) echo "$titulo: ";		
		echo "$string<br />";
	}
	
	function getNomeUsuario($idUsuario){
		$strQuery = "SELECT nome FROM usuarios WHERE idUsuario = '$idUsuario';";
		$nome = BancoDados::query($strQuery);
		return $nome[0][0];
	}
	
	function tempoDecorrido($dataini, $datafim){

		# Split para dia, mes, ano, hora, minuto e segundo da data inicial
		 $_split_datehour = explode(' ',$dataini);
		 $_split_data = explode("/", $_split_datehour[0]);
		 $_split_hour = explode(":", $_split_datehour[1]);
		 # Coloquei o parse (integer) caso o timestamp nao tenha os segundos, dai ele fica como 0
		 $dtini = mktime ($_split_hour[0], $_split_hour[1], (integer)$_split_hour[2], $_split_data[1], $_split_data[0], $_split_data[2]);

		 # Split para dia, mes, ano, hora, minuto e segundo da data final
		 $_split_datehour = explode(' ',$datafim);
		 $_split_data = explode("/", $_split_datehour[0]);
		 $_split_hour = explode(":", $_split_datehour[1]);
		 $dtfim = mktime ($_split_hour[0], $_split_hour[1], (integer)$_split_hour[2], $_split_data[1], $_split_data[0], $_split_data[2]);

		 # Diminui a datafim que é a maior com a dataini
		 $time = ($dtfim - $dtini);

		 # Recupera os dias
		 $days  = floor($time/86400);
		 # Recupera as horas
		 $hours = floor(($time-($days*86400))/3600);
		 # Recupera os minutos
		 $mins  = floor(($time-($days*86400)-($hours*3600))/60);
		 # Recupera os segundos
		 $secs  = floor($time-($days*86400)-($hours*3600)-($mins*60));

		 # Monta o retorno no formato
		 # 5d 10h 15m 20s
		 # somente se os itens forem maior que zero
		 if($days > 0){
			$retorno = -1;
		 }
		 else{
			$retorno = $hours*60 + $mins;
		 }
		 
		 return $retorno;

		 }
		 
		function getHoraInicio($idAtividade, $idAluno){
			$strQuery = "SELECT horaInicio FROM atividadetestehoraaluno WHERE idAluno = '$idAluno' AND idAtividade = '$idAtividade';";
			$resultado = BancoDados::query($strQuery);
			if(isset($resultado)){
				$retorno = $resultado[0][0];
			}
			else{
				$retorno == NULL;
			}
			return $retorno;
		 }
		 
		 function criaAbrev($palavra){
			if(strlen($palavra) > 30){
				$abreviado = substr($palavra,0,30).'...';
				return $abreviado;
			}
			else{
				return $palavra;
			}
		 }
		 
		 function	getListaAnexos($idMensagem){
		 // echo $idMensagem;
		 // die;
			$strQuery = "SELECT idArquivo, nome FROM forumarquivos WHERE idMensagem = '$idMensagem'";

			if($resultado = BancoDados::query($strQuery)){
				return $resultado;
			}else{
				return null;
			}
		}
	
		function	getAnexo($idArquivo){
			$strQuery = "SELECT nome, tamanho, tipo, arquivo FROM forumarquivos WHERE idArquivo = '$idArquivo'";
			if($resultado = BancoDados::query($strQuery)){
				return $resultado;
			}else{
				return null;
			}
		}
		
		function debuga404(){
			$GLOBALS['debuga404'] = true;
		}
		
			function alteraMensagem($idMensagem, $strMensagem){
		
			$strQuery = "UPDATE forumMensagens SET mensagem='$strMensagem' where idMensagem='$idMensagem'";
			
			if(BancoDados::query($strQuery)){
				return true;
			}
			else return false;
		
		}

		function excluiArquivo($idArquivo){
			$strQuery = "DELETE FROM forumarquivos WHERE idArquivo = '$idArquivo'";
			if(BancoDados::query($strQuery)){
				return true;
			}
			else return false;
		}

		function excluiArquivoMensagem($idMensagem){
			$strQuery = "DELETE FROM forumarquivos WHERE idMensagem = '$idMensagem'";
			if(BancoDados::query($strQuery)){
				return true;
			}
			else return false;
		}
?>